package Models

import (
	"fmt"
	"yz-go/Viper"
	"yz-go/global"

	"log"
	"os"
	"time"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

var DB *gorm.DB // 链接成功后 暴露出去
var err error

var GINBLOGDB *gorm.DB // 链接成功后 暴露出去
var errDsn error

func init() {

	// 初始化配置文件	这里无法直接读取config 因为：这里被执行的时候 可能yaml文件中的配置还没有被刷到global的config中
	Viper.ViperTest()

	DB_Host := global.Config.MysqlYZInfo.DB_Host
	DB_PASSWORD := global.Config.MysqlYZInfo.DB_PASSWORD
	DB_USERNAME := global.Config.MysqlYZInfo.DB_USERNAME
	DB_PORT := global.Config.MysqlYZInfo.DB_PORT
	DB_DATABASE := global.Config.MysqlYZInfo.DB_DATABASE
	// fmt.Printf("host:%v, 密码：%v, 用户名：%v, 端口：%v，数据库：%v\n", DB_Host, DB_PASSWORD, DB_USERNAME, DB_PORT, DB_DATABASE)

	// dsn := "root:87d6a7698bbf1ff8@tcp(47.116.76.106:3306)/eeeknow_db?charset=utf8&parseTime=True&loc=Local"
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", DB_USERNAME, DB_PASSWORD, DB_Host, DB_PORT, DB_DATABASE)

	// 控制台输出 和 sql语句
	newLogger := logger.New(
		log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer（日志输出的目标，前缀和日志包含的内容——译者注）
		logger.Config{
			SlowThreshold:             time.Second, // 慢 SQL 阈值
			LogLevel:                  logger.Info, // 日志级别
			IgnoreRecordNotFoundError: true,        // 忽略ErrRecordNotFound（记录未找到）错误
			Colorful:                  true,        // 使用用彩色打印
		},
	)
	DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
		Logger:                 newLogger,
		SkipDefaultTransaction: false, // true = 禁用事务，false=开启事务【默认】，官方：若关闭 可提升30%的性能
	})
	// DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})

	sqlDB, err := DB.DB()
	if err != nil {
		fmt.Println("链接失败：", err)
	} else {
		// 设置默认连接数
		sqlDB.SetMaxIdleConns(10)  // 设置最大空闲连接数
		sqlDB.SetMaxOpenConns(100) // 设置最大打开连接数
	}

	dsnBlog := "root:root@tcp(106.15.233.223:13306)/gin_blog?charset=utf8&parseTime=True&loc=Local"

	newLoggerBlog := logger.New(
		log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer（日志输出的目标，前缀和日志包含的内容——译者注）
		logger.Config{
			SlowThreshold:             time.Second, // 慢 SQL 阈值
			LogLevel:                  logger.Info, // 日志级别
			IgnoreRecordNotFoundError: true,        // 忽略ErrRecordNotFound（记录未找到）错误
			Colorful:                  true,        // 使用用彩色打印
		},
	)
	GINBLOGDB, errDsn = gorm.Open(mysql.Open(dsnBlog), &gorm.Config{Logger: newLoggerBlog})

	if errDsn != nil {
		fmt.Println("链接失败Dsn：", errDsn)
	}
}
